package top.lixunda.ecommerce.server.user.controller;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RestController;
import top.lixunda.commerce.common.core.entity.MessageObject;
import top.lixunda.common.validate.XumValid;
import top.lixunda.ecommerce.server.business.BaseController;
import top.lixunda.ecommerce.server.business.api.entity.dto.PageDTO;
import top.lixunda.ecommerce.server.user.api.controller.IRoleController;
import top.lixunda.ecommerce.server.user.api.entity.db.RoleDO;
import top.lixunda.ecommerce.server.user.api.entity.dto.RoleChangeDTO;
import top.lixunda.ecommerce.server.user.api.entity.dto.RoleInsertAdminDTO;
import top.lixunda.ecommerce.server.user.api.entity.dto.RoleInsertStoreDTO;
import top.lixunda.ecommerce.server.user.api.entity.dto.RoleQueryDTO;
import top.lixunda.ecommerce.server.user.service.IRoleService;

import java.util.List;

/**
 * 角色管理接口
 *
 * @author lixunda
 * @version time:2020/4/26 15:04
 */
@Slf4j
@RestController
public class RoleController extends BaseController implements IRoleController {

    private final IRoleService roleService;

    @Autowired
    public RoleController(IRoleService roleService) {
        this.roleService = roleService;
    }

    /**
     * 根据角色编号查询店铺可用角色信息
     *
     * @param id 角色编号
     * @return 角色数据
     */
    @Override
    public MessageObject<RoleDO> queryStoreRoleById(Integer id) {
        RoleDO result = roleService.queryStoreRoleById(id);
        return getSuccessMessageObject("查询数据成功", result);
    }

    /**
     * 根据角色编号查询官方后台系统可用角色信息
     *
     * @param id 角色编号
     * @return 角色数据
     */
    @Override
    public MessageObject<RoleDO> queryAdminRoleById(Integer id) {
        RoleDO result = roleService.queryAdminRoleById(id);
        return getSuccessMessageObject("查询数据成功", result);
    }

    /**
     * 根据角色编号查询店铺可用角色信息
     *
     * @param ids 角色编号列表
     * @return 角色数据列表
     */
    @Override
    public MessageObject<List<RoleDO>> queryStoreRolesByIds(List<Integer> ids) {
        List<RoleDO> result = roleService.queryStoreRolesByIds(ids);
        return getSuccessMessageObject("查询数据成功", result);
    }

    /**
     * 根据角色编号查询官方后台系统可用角色信息
     *
     * @param ids 角色编号列表
     * @return 角色数据列表
     */
    @Override
    public MessageObject<List<RoleDO>> queryAdminRolesByIds(List<Integer> ids) {
        List<RoleDO> result = roleService.queryAdminRolesByIds(ids);
        return getSuccessMessageObject("查询数据成功", result);
    }

    /**
     * 查询当前登陆店铺可用所有角色信息
     *
     * @return 角色信息列表
     */
    @Override
    public MessageObject<List<RoleDO>> queryCurrentStoreAll() {
        List<RoleDO> result = roleService.queryCurrentStoreAll();
        return getSuccessMessageObject("查询数据成功", result);
    }

    /**
     * 查询后台管理员可用所有角色信息
     *
     * @return 角色信息列表
     */
    @Override
    public MessageObject<List<RoleDO>> queryCurrentAdminAll() {
        List<RoleDO> result = roleService.queryCurrentAdminAll();
        return getSuccessMessageObject("查询数据成功", result);
    }

    /**
     * 条件分页查询当前登陆店铺可用所有角色信息
     *
     * @param pageDTO 条件分页数据
     * @return 角色信息分页数据
     */
    @Override
    public MessageObject<Page<RoleDO>> queryStoreRolePageWrapper(
            @XumValid PageDTO<RoleDO, RoleQueryDTO> pageDTO) {
        Page<RoleDO> result = (Page<RoleDO>) roleService.queryStoreRolePageWrapper(pageDTO);
        return getSuccessMessageObject("查询数据成功", result);
    }

    /**
     * 条件分页查询后台管理员可用所有角色信息
     *
     * @param pageDTO 条件分页数据
     * @return 角色信息分页数据
     */
    @Override
    public MessageObject<Page<RoleDO>> queryAdminRolePageWrapper(
            @XumValid PageDTO<RoleDO, RoleQueryDTO> pageDTO) {
        Page<RoleDO> result = (Page<RoleDO>) roleService.queryAdminRolePageWrapper(pageDTO);
        return getSuccessMessageObject("查询数据成功", result);
    }

    /**
     * 添加一条店铺角色信息数据
     *
     * @param list 添加数据DTO列表
     * @return 添加成功数据
     */
    @Override
    public MessageObject<List<RoleDO>> insertStoreRole(List<RoleInsertStoreDTO> list) {
        List<RoleDO> result = roleService.insertStoreRole(list);
        return getSuccessMessageObject("插入数据成功", result);
    }

    /**
     * 添加一条管理系统角色信息数据
     *
     * @param list 添加数据DTO列表
     * @return 添加成功数据
     */
    @Override
    public MessageObject<List<RoleDO>> insertAdminRole(List<RoleInsertAdminDTO> list) {
        List<RoleDO> result = roleService.insertAdminRole(list);
        return getSuccessMessageObject("插入数据成功", result);
    }

    /**
     * 修改一条店铺角色信息数据
     *
     * @param list 修改数据DTO列表
     * @return 修改成功数据
     */
    @Override
    public MessageObject<List<RoleDO>> changeStoreRole(List<RoleChangeDTO> list) {
        List<RoleDO> result = roleService.changeStoreRole(list);
        return getSuccessMessageObject("修改数据成功", result);
    }

    /**
     * 修改一条管理系统角色信息数据
     *
     * @param list 修改数据DTO列表
     * @return 修改成功数据
     */
    @Override
    public MessageObject<List<RoleDO>> changeAdminRole(List<RoleChangeDTO> list) {
        List<RoleDO> result = roleService.changeAdminRole(list);
        return getSuccessMessageObject("修改数据成功", result);
    }

    /**
     * 根据角色编号移除店铺角色信息
     *
     * @param roleIds 角色编号列表
     * @return 是否移除成功
     */
    @Override
    public MessageObject<Boolean> removeStoreRole(List<Integer> roleIds) {
        Boolean result = roleService.removeStoreRole(roleIds);
        return getSuccessMessageObject("删除数据成功", result);
    }

    /**
     * 根据角色编号移除管理系统角色信息
     *
     * @param roleIds 角色编号列表
     * @return 是否移除成功
     */
    @Override
    public MessageObject<Boolean> removeAdminRole(List<Integer> roleIds) {
        Boolean result = roleService.removeAdminRole(roleIds);
        return getSuccessMessageObject("删除数据成功", result);
    }

    /**
     * 修改一条店铺角色信息数据，固化数据修改
     *
     * @param list 修改数据DTO列表
     * @return 修改成功数据
     */
    @Override
    public MessageObject<List<RoleDO>> changeStoreSolidifyRole(List<RoleChangeDTO> list) {
        List<RoleDO> result = roleService.changeStoreSolidifyRole(list);
        return getSuccessMessageObject("修改数据成功", result);
    }

    /**
     * 修改一条管理系统角色信息数据，固化数据修改
     *
     * @param list 修改数据DTO列表
     * @return 修改成功数据
     */
    @Override
    public MessageObject<List<RoleDO>> changeAdminSolidifyRole(List<RoleChangeDTO> list) {
        List<RoleDO> result = roleService.changeAdminSolidifyRole(list);
        return getSuccessMessageObject("修改数据成功", result);
    }

    /**
     * 根据角色编号移除店铺角色信息，固化数据移除
     *
     * @param roleIds 角色编号列表
     * @return 是否移除成功
     */
    @Override
    public MessageObject<Boolean> removeStoreSolidifyRole(List<Integer> roleIds) {
        Boolean result = roleService.removeStoreSolidifyRole(roleIds);
        return getSuccessMessageObject("删除数据成功", result);
    }

    /**
     * 根据角色编号移除管理系统角色信息，固化数据移除
     *
     * @param roleIds 角色编号列表
     * @return 是否移除成功
     */
    @Override
    public MessageObject<Boolean> removeAdminSolidifyRole(List<Integer> roleIds) {
        Boolean result = roleService.removeAdminSolidifyRole(roleIds);
        return getSuccessMessageObject("删除数据成功", result);
    }

}
